library(plotly)
library(lattice)
library(latticeExtra)
library(ggplot2)
library(tidyverse)
library(readr)
Zaladowanie danych
dane<-read.csv("Kurcaba_dane_surowe.csv", sep=";")
Sprawdzanie czy wystepuje brak danych. Okazuje sie, że dane sa kompletne.
any(is.na(dane))
## [1] FALSE
sum(is.na(dane))
## [1] 0
#Gdyby trzeba bylo poprawiac dane, to wpisywanie do pliku wygladalo by tak:
write_csv(dane,"Kurcaba_dane_przeksztalcone.csv", col_names = TRUE)
Podstawowe statystyki dla poszczegolnych kolumn:
summary(dane)
## age job marital education
## Min. :18.00 Length:45211 Length:45211 Length:45211
## 1st Qu.:33.00 Class :character Class :character Class :character
## Median :39.00 Mode :character Mode :character Mode :character
## Mean :40.94
## 3rd Qu.:48.00
## Max. :95.00
## default balance housing loan
## Length:45211 Min. : -8019 Length:45211 Length:45211
## Class :character 1st Qu.: 72 Class :character Class :character
## Mode :character Median : 448 Mode :character Mode :character
## Mean : 1362
## 3rd Qu.: 1428
## Max. :102127
## contact day month duration
## Length:45211 Min. : 1.00 Length:45211 Min. : 0.0
## Class :character 1st Qu.: 8.00 Class :character 1st Qu.: 103.0
## Mode :character Median :16.00 Mode :character Median : 180.0
## Mean :15.81 Mean : 258.2
## 3rd Qu.:21.00 3rd Qu.: 319.0
## Max. :31.00 Max. :4918.0
## campaign pdays previous poutcome
## Min. : 1.000 Min. : -1.0 Min. : 0.0000 Length:45211
## 1st Qu.: 1.000 1st Qu.: -1.0 1st Qu.: 0.0000 Class :character
## Median : 2.000 Median : -1.0 Median : 0.0000 Mode :character
## Mean : 2.764 Mean : 40.2 Mean : 0.5803
## 3rd Qu.: 3.000 3rd Qu.: -1.0 3rd Qu.: 0.0000
## Max. :63.000 Max. :871.0 Max. :275.0000
## y
## Length:45211
## Class :character
## Mode :character
##
##
##
Liczba klientow banku posiadajaca zarowno kredyt mieszkaniowy jak i pozyczke.
n<-dane %>%
filter(loan=="yes") %>%
summarise( housing=="yes") %>%
summarise(n=n())
x<-round((n/length(dane$loan))*100,0)
print(paste("Procentowy udzial osob posiadajacych pozyczke i kredyt mieszkaniowy w ogolnej liczbie klientow banku to okolo", x, "%"))
## [1] "Procentowy udzial osob posiadajacych pozyczke i kredyt mieszkaniowy w ogolnej liczbie klientow banku to okolo 16 %"
Wyselekcjonowanie wieku najbogatszej osoby.
x<-dane %>%
select(age, balance) %>%
arrange(desc(balance), age) %>%
select(age)
y<-head(x$age,1)
print(paste("Najbogatsza i najmlodsza osoba wsrod klientow banku jest w wieku:", y, "lat."))
## [1] "Najbogatsza i najmlodsza osoba wsrod klientow banku jest w wieku: 51 lat."
Ponizej ciekawa statystyka pokazujaca jak bardzo malo osob utrzymujacych saldo roczne na poziomie wyzszym niz srednie (dla klientow banku), otrzymalo w spadku kredyt do splacenia. Jest to minimalny odsetek.
x<-dane %>%
filter(balance > mean(balance))
print(paste("Liczba osob ktora odziedziczyla kredyt w spadku:", length(x$age)))
## [1] "Liczba osob ktora odziedziczyla kredyt w spadku: 11748"
y<- x%>%
filter(default=="yes") %>%
summarise(temp= n())
print(paste("Liczba osob z saldem rocznym wiekszym niz srednie majacych kredyt w chwili urodzenia:", y$temp))
## [1] "Liczba osob z saldem rocznym wiekszym niz srednie majacych kredyt w chwili urodzenia: 9"
Ponizej sprawdzamy jaka grupa zawodowa najczesciej korzysta z uslug banku.
dane %>%
group_by(job) %>%
summarise('Liczba klientow pracujaca w danym zawodzie'=n()) %>%
arrange(desc(`Liczba klientow pracujaca w danym zawodzie`))
Poniżej sprawdzamy jaki odestek osob ktore wziely lokate w poprzedniej kampanii, stanowia osoby ktore wziely lokate podczas obecnej:
temp<-dane %>%
filter(poutcome=="success") %>%
summarise(n=n())
temp2<-dane %>%
filter(poutcome=="success") %>%
filter(y=="yes") %>%
summarise(n=n())
print(paste("Wsrod osob, ktore podczas ostatniej kampanii reklamowej skorzystaly z uslug banku, ", round((temp2/temp)*100,0), "% wzielo lokate podczas obecnej kampanii"))
## [1] "Wsrod osob, ktore podczas ostatniej kampanii reklamowej skorzystaly z uslug banku, 65 % wzielo lokate podczas obecnej kampanii"
**************************************************************** WYKRESY *****************************************************************
Krótkie zapoznanie z poszczególnymi statystykami dotyczacymi klientow banku, przy uzyciu pakietu graphics. Zauważyc mozna, ze z banku najczesciej korzystaja osoby z wyksztalceniem srednim. Jesli chodzi o status cywilny to najczestsza grupa sa osoby zamezne. Natomiast dominujaca grupa zawodowa sa osoby pracujace fizycznie i osoby zatrudnione w dziale zarzadzania.
layout(matrix(c(1,2,3,3), 2, 2, byrow = TRUE))
pie(table(dane$education), cex=1.1, col = rainbow(4),radius = 0.9,border="white")
title("Wyksztalcenie klientow banku")
barplot(table(dane$marital), las = 2, cex.names = 0.9, col="aquamarine")
title("Stan cywilny klientów banku")
barplot(table(dane$job), cex.names = 0.9,las =3, ylab = 'Liczba osób', col=15)
title("Zawód klientów banku")
Poniższy histogram pokazuje status spoleczny klientów banku oraz stopien wyksztalcenia w poszczegolnych grupach. Zauważyc można, że dominujaca grupa sa osoby bedace w malzenstwie i posiadajace wyksztalcenie srednie. Natomiast najmniej liczna grupe stanowia osoby rozwiedzione majace wyksztalcenie podstawowe.
dane %>%
plot_ly( x=~marital, color =~education, alpha=0.7, type="histogram",
marker = list(line = list(color = "rgb(8,48,107)" , width = 1.5))) %>%
layout(title = "Status cywilny i wyksztalcenie klientów banku",
xaxis=list(title="Status cywilny", showgrid=FALSE), barmode="group",
paper_bgcolor="#FFEFD5", plot_bgcolor="#FFFACD", font=list( family="Courier New, monospace",
size=15, color="RebeccaPurple" ))
Wykres zależnosci rocznego salda w zależnosci od wieku, powstal z wykorzystaniem biblioteki lattice i latticeExtra. Pokazuje on wiele ciekawych zjawisk, chociazby to ze osoby w wieku powyzej 65 roku życia najczesciej posiadaja pożyczke. Ciekawy jest rownież znaczny spadek rocznego salda miedzy osobami z przedzialu wiekowego 50-60 a 60+.
plot1<-xyplot(balance~age, data=dane,groups = loan,
auto.key = list(space = "right",title = "Pożyczka",
text = c("Tak", "Nie")), pch=19)
update(plot1,cex=0.9, xlab="Wiek", ylab="Saldo [€]",
main="Wykres zależnosci rocznego salda w zależnosci od wieku",
par.setting =ggplot2like())
Poniższa zależnosci stworzona dzieki pakietowi ggplot2, pokazuje jak zmienia sie liczba rozmow podczas obecnej kampanii marketingowej w zależnosci od czasu trwania tej rozmowy, z dodatkowym podzialem na sposob kontaktu. Dodatkowe wypelnienie wykresow pokazuje czy kampania reklamowa przyniosla efekt i klient skorzystal z uslug banku biorac lokate. Ciekawe jest to ze im dluzszy czas rozmowy tym wieksze prawdopodobienstwo ze klient wezmie lokate. Widoczna jest rowniez znaczna przewaga telefonu komorkowego jako sposobu kontaktu w porownaniu z telefonem stancjonarnym. Widoczna na wykresie linia pokazuje sredni czas trwania rozmowy dla badanych danych.
temp<-dane %>%
filter(contact != "unknown")
linia <- temp %>% summarize(temp=mean(duration))
ggplot(temp, aes(x=duration, fill=y)) +
geom_histogram(binwidth=23) + facet_grid(contact~.)+
labs(x="Czas trwania rozmowy [s]", y="Liczba rozmów o danym czasie")+
ggtitle("Liczba rozmów podczas kampani w zależnosci od czasu trwania tych rozmów")+
scale_fill_manual(name="Deposit",values = c("#9FE8FF", "#FF8920"))+
theme_grey()+
xlim(NA, 2000)+
geom_vline(data = linia, aes(xintercept = temp), color = "red",linetype = "dashed")+
theme(plot.background = element_rect("#BFBFBF"), legend.background = element_rect("#DFDFDF"))
Poniższy wykres zrealizowany z pomoca pakietu ggplot2, pokazuje ciekawa zaleznosc miedzy posiadaniem kredytu mieszkaniowego a posiadanym wyksztalceniem. Zauwazyc mozemy znaczna przewage liczby posiadaczy kredytu mieszkaniowego w stosunku do tych, którzy nie posiadaja kredytu wsrod osob majacych wyksztalcenie drugiego stopnia.
ggplot(dane, aes(x=education, fill=housing)) +
geom_bar(position="dodge")+
ggtitle("Zaleznosc posiadania kredytu mieszkaniowego od poziomu wyksztalcenia")+
labs(x="Wyksztalcenie", y="Liczba osob")+
theme(legend.position = c(.95, .95), legend.justification = c("right", "top"),
legend.background = element_rect("#FFE7FF"),
plot.background=element_rect("#FFD7DC"),plot.title = element_text(size = rel(1.1), face="bold"),
panel.background = element_rect("#FFE7EC"),
legend.title = element_text(face = "bold"), axis.title.x = element_text( size=11, face="bold"),
axis.title.y = element_text( size=11, face="bold"))